# LuckPay Web Manage System
#
# Copyright (c) 2016 Lucky Byte, Inc.
#
crypto  = require 'crypto'

secure = {}
module.exports = secure


# 加密数据(采用 DES EDE 算法)
#
# 注意：
#  1. 因为采用 NoPadding 填充，所以数据的长度必须是 8 的整倍数，这是为了和 Java 模块兼容;
#  2. 输入和输出数据都是 Hex 格式;
#
secure.encryptEde = (clear_text) ->
    if not settings.secure_key
        console.error '没有配置安全密钥，不作加密处理...'
        return clear_text

    if not clear_text
        console.error '加密输入参数为空，请检查...'
        return null

    if clear_text.length % 8 isnt 0
        console.error '待加密数据长度错误，请检查...'
        return null

    key = Buffer.from settings.secure_key, 'hex'
    if key.length isnt 16
        console.error '安全密钥配置错误，必须由 32 位[0-9A-F]数字组成'
        return null

    cipher = crypto.createCipheriv('des-ede', key, new Buffer(''))
    cipher.setAutoPadding(false)
    cipher_text = cipher.update(clear_text, 'hex', 'hex');
    cipher_text += cipher.final('hex')
    return cipher_text.toUpperCase()


secure.decryptEde = (cipher_text) ->
    if not settings.secure_key
        console.log '没有配置安全密钥，不作解密处理...'
        return cipher_text

    if not cipher_text
        console.error '解密输入参数为空，请检查...'
        return null

    if cipher_text.length % 8 isnt 0
        console.error '待解密数据长度错误，请检查...'
        return null

    key = Buffer.from settings.secure_key, 'hex'
    if key.length isnt 16
        console.error '安全密钥配置错误，必须由 32 位[0-9A-F]数字组成'
        return null

    cipher = crypto.createDecipheriv('des-ede', key, new Buffer(''))
    cipher.setAutoPadding(false)
    clear_text = cipher.update(cipher_text, 'hex', 'hex');
    clear_text += cipher.final('hex')
    return clear_text.toUpperCase()
